import Vue from 'vue'
import Router from 'vue-router'

// 在development-env中不使用延迟加载，因为延迟加载太多的页面会导致webpack热更新太慢。因此，只有在生产中使用延迟加载;
// detail: https://panjiachen.github.io/vue-element-admin-site/#/lazy-loading

Vue.use(Router)

/* Layout */
import Layout from '../views/layout/Layout'

/**
* hidden: true                   如果' hidden:true '不会显示在侧边栏中(默认为false)，当设置 true 的时候该路由不会再侧边栏出现 如401，login等页面
* alwaysShow: true               当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面
*                                只有一个时，会将那个子路由当做根路由显示在侧边栏--如引导页面
*                                若你想不管路由下面的 children 声明的个数都显示你的根路由
*                                 你可以设置 alwaysShow: true，这样它就会忽略之前定义的规则，一直显示根路由
* redirect: noredirect           如果“重定向:noredirect”不会在面包屑中重定向（不可被点击）
* name:'router-name'             设定路由的名字，一定要填写不然使用<keep-alive>时会出现各种问题
* meta : {
    roles: ['admin','editor']    控制页面角色(可以设置多个角色)
    title: 'title'               子菜单和面包屑中显示的名称(推荐设置)
    icon: 'svg-name'             图标显示在侧栏中
    breadcrumb: false            如果设置为false，则不会在breadcrumb面包屑中显示(默认为true)
  }
**/

/**
 * 所有权限通用路由表
 * 没有权限要求的基本页,所有角色都可以访问
 * 如首页和登录页和一些不用权限的公用页面
 */
export const constantRouterMap = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },
  {
    path: '/404',
    component: () => import('@/views/error-page/404'),
    hidden: true
  },
  {
    path: '/401',
    component: () => import('@/views/error-page/401'),
    hidden: true
  },
  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      name: 'Dashboard',
      path: 'dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: {
        title: '首页',
        icon: 'table'
      }
    }]
  },
  {
    path: '/profile',
    component: Layout,
    redirect: '/profile/index',
    hidden: true,
    children: [
      {
        path: 'index',
        component: () => import('@/views/profile/index'),
        name: 'Profile',
        meta: { title: 'Profile', icon: 'user', noCache: true }
      }
    ]
  }
]

/**
 * 异步挂载的路由
 * 动态需要根据权限加载的路由表
 */
export const asyncRouterMap = [
  {
    path: '/system',
    component: Layout,
    name: 'System',
    redirect: 'noredirect',
    alwaysShow: true, // 一直显示根路由
    meta: {
      title: '系统管理',
      icon: 'form',
      roles: ['admin', 'editor'] // 您可以在根导航中设置角色
    },
    children: [
      {
        path: 'module',
        name: 'Module',
        component: () => import('@/views/system/index'),
        hidden: true,
        meta: { title: '模块管理', icon: 'form', roles: ['admin', 'editor'] } // 或者在子导航中设置角色
      },
      {
        path: 'user',
        component: () => import('@/views/system/user'),
        name: 'User',
        meta: {
          title: '用户管理',
          icon: 'form',
          roles: ['admin']
        }
      },
      {
        path: 'role',
        component: () => import('@/views/system/role'),
        name: 'RolePermission',
        meta: {
          title: '角色权限',
          icon: 'form',
          roles: ['admin']
        }
      }
    ]
  },
  {
    path: '*',
    redirect: '/404',
    hidden: true
  }
]
// 实例化vue的时候只挂载constantRouter
export default new Router({
  // mode: 'history', //后端支持可开
  // scrollBehavior: () => ({ y: 0 }),
  routes: constantRouterMap
})
